
package ejb;

import ejb.Messaggio;
import ejb.Utente;
import ejb.GestoreMessaggioBeanLocal;
import ejb.MessaggioFacadeLocal;
import java.util.Calendar;
import java.util.Date;
import java.util.List;
import java.util.TimeZone;
import javax.ejb.EJB;
import javax.ejb.Stateless;

/**
 *
 * @author Rob
 */
@Stateless
public class GestoreMessaggioBean implements GestoreMessaggioBeanLocal {

     @EJB
    private MessaggioFacadeLocal messaggioFacade;
     
   /**
    * Invio del messaggio.
    * La fase di creazione del messaggio  è equivalente all'invio dello stesso.
    * @param contenuto contenuto del messaggio da inviare
    * @param mitt mittente del messaggio
    * @param dest lista dei destinatari del messaggio
    * @return Messaggio messaggio inviato, null altrimenti
    */ 
    @Override
    public Messaggio sendMessaggio(String contenuto, Utente mitt,List<Utente> dest){
        Messaggio m = new Messaggio();
        m.setContenuto(contenuto);
        m.setMittente(mitt);
        m.setDestinatari(dest);
        Calendar localCalendar = Calendar.getInstance(TimeZone.getDefault());
        Date data = localCalendar.getTime();
        m.setData(data);
        m.setLetto(false);
        messaggioFacade.create(m);
        return m;
    }
     
    /**
    * Legge un messaggio settando l'attributo letto a true.
    * @param id id del messaggio
    */ 
    @Override
    public void leggiMessaggio(Long id){
        Messaggio m = messaggioFacade.find(id);
        m.setLetto(true);
        messaggioFacade.edit(m);
    }
    
    /**
    * Verifica se un certo messaggio identificato dal suo id e' stato gia letto oppure no
    * @param id id del messaggio
    * @return true se il messaggio è stato già letto, false altrimenti
    */ 
    @Override
    public boolean messaggioGiaLetto(Long id){
        return messaggioFacade.messageAlreadyRead(id);
    }
     
    /**
    * Cerca un messaggio
    * @param id id del messaggio
    * @return Messaggio messaggio cercato, null altrimenti
    */ 
    @Override
    public Messaggio trovaMessaggio(Long id){
        return messaggioFacade.find(id);
    }
    
    /**
    * Cerca i messaggi che un utente non ha ancora letto
    * @param u utente destinatario
    * @return List<Messaggio> messaggi da leggere, altrimenti restituisce una lista vuota
    */ 
    @Override
    public List<Messaggio> estraiMessaggiDaLeggere(Utente u){
        return messaggioFacade.getUnreadMessages(u);
    }
    
    /**
    * Cerca i messaggi ricevuti da un utente
    * @param u utente destinatario
    * @return List<Messaggio> messaggi ricevuti, altrimenti restituisce una lista vuota
    */ 
    @Override
    public List<Messaggio> estraiMessaggiRicevuti(Utente u){
        return messaggioFacade.getReceivedMessages(u);
    } 
    
    /**
    * Cerca i messaggi inviati da un utente
    * @param u utente mittente
    * @return List<Messaggio> messaggi inviati, altrimenti restituisce una lista vuota
    */ 
    @Override
    public List<Messaggio> estraiMessaggiInviati(Utente u){
        return messaggioFacade.getSendedMessages(u);
    }
    
    /**
    * Rimuove un messaggio
    * @param id id del messaggio
    */ 
    @Override
    public void rimuoviMessaggio(Long idMessaggio){
        Messaggio m= trovaMessaggio(idMessaggio);
        messaggioFacade.remove(m);
    }

}
